<?
// +----------------------------------------------------------------------+
// |       	     Copyright (c) 2013 Carlos Mora Molina    			      |
// +----------------------------------------------------------------------+
// | Este programa es software libre. Puede distribuirlo  y/o modificarlo |
// | bajo los términos de la  licencia GNU General Public License  tal  y |
// | como la publica la Fundación de Software Libre, bajo la denominación |
// | GPL, en su versión 2 o posterior (versión inglesa).                  |
// |                                                                      |
// | This program is free software. You can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 or later of the GPL.  |
// +----------------------------------------------------------------------+
// | Autores/Authors:                                                     |
// |          Carlos Mora <ozonosp@gmail.com>                             |
// +----------------------------------------------------------------------+
//
// $Id: Exp $


/**
  * __U_TABLE_NAME__ Object.
  * Esta clase contiene un mapeo de los valores de la tabla __U_TABLE_NAME__ en la BBDD
  * __DATE_VERSION__
  * NO MODIFIQUE ESTA CLASE, si desea modificar algo agregelo al archivo __U_TABLE_NAME__.tpl dentro
  * del directorio auto_include y se incluirá automáticamente.
  * Si desea incluir contenido en el contructor no lo haga en este archivo, declare la funcion
  * constructor($param1 = NULL, $param2 = NULL, $param3 = NULL, $param4 = NULL) en auto_include
  * y será llamada cada vez que se contruya la clase.
  */
class __U_TABLE_NAME__ {

__FIELDS_NAMES__

	
	/**
	 * Contructor de la clase
	 * Si desea añadir algo en el contructor no lo haga modificando la plantilla sino declarando
	 * constructor($param1 = NULL, $param2 = NULL, $param3 = NULL, $param4 = NULL) en el archivo de include, 
	 * constructor recibirá los parametros en el mismo orden y se llamará cada vez que se construya la clase
	 * @param string $param1
	 * @param string $param2
	 * @param string $param3
	 * @param string $param4
	 */
    function __U_TABLE_NAME__ ($param1 = NULL, $param2 = NULL, $param3 = NULL, $param4 = NULL) {
    	
    	
    	/**
    	 * Si en el fichero de includes se añade constructor($param1 = NULL, $param2 = NULL, $param3 = NULL, $param4 = NULL)
    	 * se llamará cada vez que se construya la clase
    	 */
		if(method_exists($this,'constructor')) $this->constructor($param1, $param2, $param3, $param4);
    }

	/**
	 * Funcion mágica get, Uso: valor = $objeto->variable; 
	 * @param unknown $name
	 */
	 public function __get($name) {
	 	if($name == 'data_types') return false; //Evitamos que se acceda a esta propiedad
	 	if(isset($this->$name)) return $this->$name;
	 	error_log("Está intentando acceder a una propiedad que no existe $name en el objeto __U_TABLE_NAME__");
	 	return false;
	  }
	  
	  /**
	   * Funcion mágica set, Uso: $objeto->variable = valor;
	   * @param unknown $name
	   */	  
	  public function __set($name, $value) {
	  	if($name == 'data_types') return false; //Evitamos que se acceda a esta propiedad
    	if(!isset($this->$name)) $noExiste = true;
    	$this->$name = $value;
    	if(!empty($noExiste)){
    		error_log("Está intentando ajustar una propiedad que no existe $name en el objeto __U_TABLE_NAME__, su guardó de todos modos"); 
 			return false;
 		}
    	return true;
	  }
	  
	  /**
	   * Resetea la propiedad dada
	   * @param string Nombre de la propiedad a resetear
	   */
	  public function clear($field){
	  	$this->$field = NULL;
	  }
	  
	  /**
	   * Rellena un objeto a partir de un array cuyo indice debe coincidir con las propiedades del objeto
	   * este método es ideal para pasarle un $_POST y autorellenar un objeto con los datos de un formulario
	   * También puede recibir un objeto y ajustará las propiedades que coincidan con él mismo
	   * IMPORTANTE: Tenga en cuenta resetear las propiedades que no desea que esten rellenadas ya que el usuario
	   * podría incluir campos como id en el formulario y probocar fallos de seguridad.
	   * @param array Array de datos de entrada
	   */
	  public function loadFrom($arr){
	  	if(is_object($arr)) $arr = get_object_vars($arr); //Si es un objeto lo convertimos a array primero
	  	foreach($arr as $index => $data){
	  		if(property_exists($this,$index)) $this->$index = $data;
	  	}
	  	return true;
	  }
	  
	  // ###############################################	CODIGO AUTO INCLUIDO POR EL USUARIO ####################################
	  
	  __AUTO_INCLUDE__

}

?>